const { verify } = require("../util/jwt");
const { jwtSecret } = require("../config/config.default");
const { User } = require("../model");

module.exports = async (req, res, next) => {
  next();
  // 从请求头获取token数据
  let token = req.headers.authorization;
  // 验证token是否存在
  token = token ? token.split("Bearer ")[1] : null;
  // console.log(token);
  // 如果不存在， 发送响应 401 结束响应
  if (!token) {
    console.log("请求头中没有token");
    return res
      .status(401)
      .send({ statusCode: 401, errMsg: "请求头中没有token" });
  }
  try {
    // 验证token是否有效
    // @ts-ignore
    const decodedToken = await verify(token, jwtSecret);

    console.log("decodedToken:", decodedToken);
    // 将用户信息挂载到请求对象上
    // @ts-ignore
    req.user = await User.findById(decodedToken.userId);
    next();
  } catch (err) {
    console.log("token已失效");
    // console.log(err);
    return res.status(401).send({ statusCode: 401, errMsg: "token已失效" });
  }
  // 如果有效，将用户信息读取，挂载到req请求对象上，继续往后执行
};
